List-2 GetTateShift() function

/*----------------------------------------------------------------------------
Copyright © 1992, Apple Computer, Inc, All Rights Reserved.
	
File:		GetTateShift.c
		
Author:	Masaya Ishii
	
Contains:	
											
Revisions: (most recent first):
	
	ID		Date		Description
		
	<1>		19/06/92	Masaya Ishii - Created file.
														
--------------------------------------------------------------------------*/
#include	<Fonts.h>


typedef char int8;
typedef unsigned char uint8;
typedef short int16;
typedef unsigned short uint16;
typedef long int32;
typedef unsigned long uint32;

typedef short FWord;
typedef unsigned short uFWord;
typedef long F26Dot6;
typedef long sfnt_TableTag;

typedef struct {
	sfnt_TableTag	tag;
	uint32			checkSum;
	uint32			offset;
	uint32			length;
} sfnt_DirectoryEntry;

typedef struct {
	int32 version;			/* 0x10000 (1.0) */
	uint16 numOffsets;		/* number of tables */
	uint16 searchRange;		/* (max2 <= numOffsets)*16 */
	uint16 entrySelector;		/* log2(max2 <= numOffsets) */
	uint16 rangeShift;		/* numOffsets*16-searchRange*/
	sfnt_DirectoryEntry table[1];	/* table[numOffsets] */
} sfnt_OffsetTable;


/*  --------------------------------------------------------------
	Function     :	Get shift value for 'tategaki' characters.
	Parameters   :	Handle to FOND resource.
	Return value :	>0 : Shift value of 'tategaki'.
			-1 : This font is NOT have 'tategaki' table.
					(6.x compatible fonts.)
----------------------------------------------------------------  */

long	GetTateShift(Handle FOND)
{
	long	ffIntl	= *(long *)&(((FamRec *)*FOND)->ffIntl);
	sfnt_OffsetTable	*OffsetTable;
	uint16	i;

	if (!ffIntl)
		return -1;			// 6.x compatible.

	OffsetTable	= (sfnt_OffsetTable *)(ffIntl + *FOND);
	for (i=0; i< OffsetTable->numOffsets; i++)
		if (OffsetTable->table[i].tag	== 'tate')
			return *(long*)(OffsetTable->table[i].offset +
					   (long)OffsetTable);

	return -1;				// table not found.
}


Fig.2 Obtaining shift value


'tate' table TechNote Ç÷ñflÇÈ
ˇ